package br.org.universa.sgos.entidade;

import java.util.Calendar;

import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.org.universa.sgos.enums.NivelDeUrgenciaEnum;
import br.org.universa.sgos.enums.StatusAtividadeEnum;

@Entity
@Table(name = "TAR_TAREFA")
@AttributeOverrides({
    @AttributeOverride(name="id", column=@Column(name="TAR_ID")),
    @AttributeOverride(name="nivelDeUrgencia", column=@Column(name="TAR_NIVEL_URGENCIA")),
    @AttributeOverride(name="dataHoraAbertura", column=@Column(name="TAR_DH_ABERTURA")),
    @AttributeOverride(name="dataHoraFechamento", column=@Column(name="TAR_DH_FECHAMENTO"))
})
@AssociationOverrides({
    @AssociationOverride(name = "categoria", joinColumns = @JoinColumn(name = "TAR_CATEGORIA_ASSOCIADA", nullable = false)),
    @AssociationOverride(name = "agenteIniciador", joinColumns = @JoinColumn(name = "TAR_AGENTE_INICIADOR", nullable = false)),
    @AssociationOverride(name = "agenteResponsavel", joinColumns = @JoinColumn(name = "TAR_AGENTE_RESPONSAVEL"))
})
public class RegistroTarefa extends Registro {

    @Column(name = "TAR_IDENTIFICADOR", nullable = false)
    private String identificador;

    @Column(name = "TAR_NIVEL_URGENCIA")
    @Enumerated(EnumType.STRING)
    private NivelDeUrgenciaEnum nivelDeUrgencia;

    @Column(name = "TAR_DESCRICAO")
    private String descricao;

    @Column(name = "TAR_STATUS")
    @Enumerated(EnumType.STRING)
    private StatusAtividadeEnum status;

    @Column(name = "TAR_DATA_PREVISTA_ABERTURA")
    @Temporal(value = TemporalType.DATE)
    private Calendar dataPrevistaAbertura;

    @Column(name = "TAR_DATA_PREVISTA_FECHAMENTO")
    @Temporal(value = TemporalType.DATE)
    private Calendar dataPrevistaFechamento;

    @ManyToOne
    @JoinColumn(name = "TAR_REQUISICAO_ASSOCIADA", nullable = false)
    private RegistroRequisicao requisicao;

    public String getIdentificador() {
        return identificador;
    }

    public void setNivelDeUrgencia(NivelDeUrgenciaEnum nivelDeUrgencia) {
        this.nivelDeUrgencia = nivelDeUrgencia;
    }

    public NivelDeUrgenciaEnum getNivelDeUrgencia() {
        return nivelDeUrgencia;
    }

    public void setIdentificador(String identificador) {
        this.identificador = identificador;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public StatusAtividadeEnum getStatus() {
        return status;
    }

    public void setStatus(StatusAtividadeEnum status) {
        this.status = status;
    }

    public RegistroRequisicao getRequisicao() {
        return requisicao;
    }

	public Calendar getDataPrevistaAbertura() {
		return dataPrevistaAbertura;
	}

	public void setDataPrevistaAbertura(Calendar dataPrevistaAbertura) {
		this.dataPrevistaAbertura = dataPrevistaAbertura;
	}

	public Calendar getDataPrevistaFechamento() {
		return dataPrevistaFechamento;
	}

	public void setDataPrevistaFechamento(Calendar dataPrevistaFechamento) {
		this.dataPrevistaFechamento = dataPrevistaFechamento;
	}

    public void setRequisicao(RegistroRequisicao requisicao) {
        this.requisicao = requisicao;
    }

}
